home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / amos / mazer / fastmazer.amos / fastmazer.amosSourceCode < prev    next >
AMOS Source Code  |  1999-05-17  |  2KB  |  76 lines

  1. 'This program creates mazes! 
  2. '
  3. Dim MAZE(6,6),FLAGS(6,6)
  4. For B=0 To 6
  5.    For A=0 To 6
  6.       FLAGS(A,B)=15
  7.    Next 
  8. Next 
  9. For A=0 To 6
  10.    Add FLAGS(A,0),-1 : Rem No N exit on N row 
  11.    Add FLAGS(6,A),-2 : Rem No E exit on E row 
  12.    Add FLAGS(A,6),-4 : Rem No S exit on S row 
  13.    Add FLAGS(0,A),-8 : Rem No W exit on W row 
  14. Next 
  15. Dim DIX(3),DIY(3)
  16. DIY(0)=-1 : DIX(1)=1 : DIY(2)=1 : DIX(3)=-1
  17. '
  18. 'Here we go... 
  19. '
  20. Randomize Timer
  21. Print : Input "How many mazes? ";MZ
  22. '
  23. If Exist("Mazes")
  24.    Append 1,"Mazes"
  25. Else 
  26.    Open Out 1,"Mazes"
  27. End If 
  28. '
  29. GO1:
  30. For A=0 To 6 : For B=0 To 6 : MAZE(A,B)=0 : Next : Next 
  31. '
  32. 'Start position
  33. '
  34. X=Rnd(6) : Y=Rnd(6) : VISITED=0
  35. '
  36. Do 
  37.    If VISITED=48 Then Goto SLUTT
  38.    '
  39.    DI=Rnd(3) : OD=DI : D$=""
  40.    'Build list of exits 
  41.    For T=1 To 4 : P2=2^DI
  42.       If(FLAGS(X,Y) and P2)=P2
  43.          If MAZE(X+DIX(DI),Y+DIY(DI))=0
  44.             D$=D$+Chr$(DI+64)
  45.          End If 
  46.       End If 
  47.       Add DI,1,0 To 3
  48.    Next 
  49.    If D$>""
  50.       'Pick and move 
  51.       DI=Asc(D$)-64 : P2=2^DI
  52.       MAZE(X,Y)=MAZE(X,Y) or P2
  53.       Add X,DIX(DI) : Add Y,DIY(DI)
  54.       DI=(DI+2) and 3
  55.       MAZE(X,Y)=MAZE(X,Y) or(2^DI)
  56.       Inc VISITED
  57.    Else 
  58.       'Scan for used room
  59.       Repeat 
  60.          Add X,1,0 To 6
  61.          If X=0 : Add Y,1,0 To 6 : End If 
  62.       Until MAZE(X,Y)>0
  63.    End If 
  64. Loop 
  65. '
  66. SLUTT:
  67. '
  68. 'Store the maze and go back for another
  69. '
  70. For B=0 To 6 : For A=0 To 6
  71.       Print #1,Chr$(MAZE(A,B)+64);
  72. Next : Next 
  73. Print #1,""
  74. Dec MZ : Print Using "#####";MZ;Cup$
  75. If MZ>0 Then Goto GO1
  76. Close